package com.design.pattern.TemplateMethod;

/**
 * Created by Administrator on 2016/5/17.
 * 定义抽象模本，包括模板方法，具体实现，抽象方法，hook方法
 */
public abstract class AbstactTemplate {
    /**
     * 模板方法，定义一些顶级逻辑
     */
    public void tempateMethod(){
        this.concreteMethod();
        if (this.hookMethod()){
            this.abstactMethod();
        }
        this.abstactMethod2();
    }

    /**
     * 基本方法声明，由子类实现
     */
    protected abstract void  abstactMethod();

    /**
     * 基本方法声明，由子类实现
     */
    protected abstract void  abstactMethod2();

    /**
     * 基本法方法，hook方法
     * @return
     */
    protected boolean hookMethod(){
        return false;
    }

    /**
     * 基本方法，已实现
     */
    private void concreteMethod(){
        System.out.println("这是在抽象模板中的具体实现方法");
    }


}
